

package presentation;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Vector;

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;

import controle.ControlJButtonSaveEtudiant;
import controle.ControlJListGroupes;
import controle.ControlJListModules;
import controle.ControlJButtonSaveEtudiant;
import abstraction.Etudiant;
import abstraction.Groupe;
import abstraction.Module;

import abstraction.Cours;


/** classe qui crée la fenetre qui s'affiche lors de la création ou de la modification d'un étudiant
 * 
 * 
 * @author PICOSSON
 *
 */
public class EtudiantDialog extends JDialog {
	private static final long serialVersionUID = 1L;

	private JTextField nom;
	private JTextField prenom;
	private JTextField email;


	Vector<Groupe> groupesExistants;
	JList<String> listeGroupesExistants = new JList<String>();
	Vector<String> groupesSelectionnes = new Vector<String>();
	HashMap<Integer, Integer> indexGroupesSelectionnes = new HashMap<Integer,Integer>();
	JList<String> listeGroupesSelectionnes = new JList<String>();

	private final Cours nouveauCours;

/**
 * 
 * @param parent
 * @param modele
 * @param nouveauModele
 * @param creation
 * @throws SQLException
 */
	public EtudiantDialog(Frame parent,Cours modele, Cours nouveauModele, boolean creation)
			throws SQLException {
		super(parent, "Eleve", true);
		this.nouveauCours = nouveauModele;//on crée un nouveau modèle indépendant du premier pour sélectionner un groupe courant à rajouter à l'élève

		// PARTIE IDENTITE : champs à remplir
		JPanel partieIdentite = new JPanel(new GridLayout(9, 1));

		this.getContentPane().setLayout(new BorderLayout());
		this.setPreferredSize(new Dimension(700, 500));
		this.setMinimumSize(new Dimension(300, 550));

		partieIdentite.setBorder(BorderFactory.createEmptyBorder(6, 6, 6, 6));
		partieIdentite.add(new JLabel("Nom de l'eleve"));
		nom = new JTextField();
		partieIdentite.add(nom);
		partieIdentite.add(new JLabel("Prénom de l'eleve"));
		prenom = new JTextField();
		partieIdentite.add(prenom);
		partieIdentite.add(new JLabel("Mail de l'eleve"));
		email = new JTextField();
		partieIdentite.add(email);
		partieIdentite.add(new JLabel("Groupes de l'eleve"));
		JScrollPane sp = new JScrollPane(this.listeGroupesSelectionnes);

		partieIdentite.add(sp);
		JPanel buttons = new JPanel();
		JButton save = new JButton("OK");
		save.addActionListener(new ControlJButtonSaveEtudiant(this,
				modele, creation));
		buttons.add(save);
		partieIdentite.add(buttons);

		this.getContentPane().add(partieIdentite, BorderLayout.WEST);

		// PARTIE GROUPE : groupes à sélectionner pour rajouter l'élève dans les
		// groupes
		JPanel selectionGroupe = new JPanel();
		selectionGroupe.setLayout(new BoxLayout(selectionGroupe,
				BoxLayout.X_AXIS));
		selectionGroupe.setBorder(BorderFactory.createEmptyBorder(6, 6, 6, 6));

		// Modules
		final JList<String> listeModules = new JList<String>();

		JPanel panelModules = new JPanel(new BorderLayout());
		panelModules.add(new JLabel("Liste des groupes existants"),
				BorderLayout.NORTH);

		listeModules.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

		ControlJListModules controleListeModules = new ControlJListModules(
				nouveauCours, listeModules);
		listeModules.addListSelectionListener(controleListeModules);
		nouveauCours.addObserver(controleListeModules);

		panelModules.add(new JScrollPane(listeModules), BorderLayout.CENTER);

		panelModules.add(new JLabel("Module"), BorderLayout.NORTH);
		selectionGroupe.add(panelModules);

		// Groupes
		JPanel panelGroupes = new JPanel(new BorderLayout());

		ControlJListGroupes controleListeGroupes = new ControlJListGroupes(
				nouveauCours, listeGroupesExistants);
		listeGroupesExistants.addListSelectionListener(controleListeGroupes);
		nouveauCours.addObserver(controleListeGroupes);

		panelGroupes.add(new JScrollPane(listeGroupesExistants),
				BorderLayout.CENTER);

		panelGroupes.add(new JLabel("Groupe"), BorderLayout.NORTH);
		JButton rajouterGroupe = new JButton("Rajouter");
		panelGroupes.add(rajouterGroupe, BorderLayout.SOUTH);

		selectionGroupe.add(panelGroupes);

		this.getContentPane().add(selectionGroupe, BorderLayout.CENTER);

		if(!creation){
			Etudiant e = modele.findEtudiant(modele.getEtudiantCourant());
			Vector<Groupe> groupes = modele.getGroupes(e);
			nom.setText(e.getNom());
			prenom.setText(e.getPrenom());
			email.setText(e.getEmail());
			Iterator<Groupe> it = groupes.iterator();
			while(it.hasNext()){
				Groupe g = it.next();
				indexGroupesSelectionnes.put(g.getId_module(), g.getId_groupe());
				groupesSelectionnes.clear();
				int i = 0;
				Iterator<Integer> iterateur = indexGroupesSelectionnes.keySet().iterator();
				while(iterateur.hasNext()){
					i = iterateur.next();					
					groupesSelectionnes.add(nouveauCours.findModule(i).getNom() +" : " + nouveauCours.findGroupe(indexGroupesSelectionnes.get(i)).getNom());
				}
				listeGroupesSelectionnes.setListData(groupesSelectionnes);
				listeGroupesSelectionnes.repaint();
			}
		}
		
		rajouterGroupe.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {

				if(nouveauCours.getModuleCourant() != -1 && nouveauCours.getGroupeCourant() != -1)
					indexGroupesSelectionnes.put(nouveauCours.getModuleCourant(),nouveauCours.getGroupeCourant());
				groupesSelectionnes.clear();
				int i = 0;
				Iterator<Integer> it = indexGroupesSelectionnes.keySet().iterator();
				while(it.hasNext()){
					i = it.next();					
					groupesSelectionnes.add(nouveauCours.findModule(i).getNom() +" : " + nouveauCours.findGroupe(indexGroupesSelectionnes.get(i)).getNom());
				}
				listeGroupesSelectionnes.setListData(groupesSelectionnes);
				listeGroupesSelectionnes.repaint();

			}
		});
		
		this.pack();
		super.setLocationRelativeTo(parent);
	}
	public String getNom() {
		return nom.getText();
	}

	public String getPrenom() {
		return prenom.getText();
	}

	public String getEmail() {
		return email.getText();
	}

	public HashMap<Integer, Integer> getSelectedGroupes() {
		return indexGroupesSelectionnes;
	}

}
